package bud.vo;

import java.util.List;

import lombok.Data;

@Data
public class BoardFormDTO<T> {
	//페이징에 관련된 프로퍼티
	private Integer screen_size;
	private Integer block_size;
	private Integer totalRecords;
	private Integer totalPages;
	private Integer startPage;
	private Integer endPage;
	private Integer startRow;
	private Integer endRow;
	private Integer currentPage;
	
	private String state;
	private String message;
	//뷰로 전달될 DTO를 가진 프로퍼티들
	private List<T> dataList;
	private T data;
	//페이징 링크 제공을 위한 문자열
	private String pagingHTML;
	 
	//검색에 관련된 프로퍼티
	private String searchWord;
	private String searchType;
	
	//댓글 검색에 관한 프로퍼티
	private Integer bo_no;
	private Integer bsh_no;
	
	/**
	 * 총 게시물 수가 설정되는 순간 모든 페이징 연산을 끝내기 위한 setter
	 * @param totalRecords
	 */
	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
		//총 페이지 수
		totalPages = (int) Math.ceil(totalRecords / (double)screen_size);
		//현재 구간에서 보여질 마지막 행번호
		endRow = currentPage * screen_size;
		//현재 구간에서 보여질 첫 행번호
		startRow = endRow - (screen_size-1);
		//현재 구간에서 링크를 제공할 첫 페이지
		startPage = (currentPage-1) / block_size * block_size+1;
		//현재 구간에서 링크를 제공할 마지막 페이지 
		endPage = startPage + (block_size-1);
		
		StringBuffer html = new StringBuffer("");
		if(startPage > 1) {
			html.append("<a href ='javascript:goPage("+(startPage-1)+")'>이전</a>");
		}
		for(int i=startPage; i<=(endPage>totalPages?totalPages:endPage); i++) {
			if(i==currentPage) {
				html.append("["+i+"]");
			} else {
				html.append("<a href='javascript:goPage("+i+")'>["+i+"]</a>");
			}
		}
		if(endPage < totalPages) {
			html.append("<a href ='javascript:goPage("+(endPage+1)+")'>다음</a>");
		}
		pagingHTML = html.toString();
	}
}
